草庐IT

C++ 内存分配

全部标签

windows - 在Windows上混淆物理内存

我有两个线程和一个大型数据集。线程R不断从数据集中读取数据,并向用户展示数据View。线程W不断接收远程数据,对其执行一些工作并将其发布到数据集。线程R需要控制接收数据集一致View的粒度。一种解决方案是双重缓冲。W写一个副本,而R从另一个副本读取,并且当R准备更新时,要么将W的副本原子复制到R(禁止,因为数据集很大且几乎没有变化),要么它们原子地交换副本,并且W带回R的旧版本通过重新应用自上次交换以来的增量更改来复制最新数据(讨厌跟踪这些变化,并且讨厌所有增量都要处理两次)。我想做的是以下几点:两个线程独立地保留虚拟只读内存范围,并且两个范围都映射到同一页物理页线程W安装了一个异常处

c++ - 为什么这个循环会破坏我的内存?

我的MMF类中有这个函数voidClear(){intsize=SizeB();intiter=size/sysInfo.granB;for(inti=0;i所以它所做的是以最小的可寻址block(在本例中为64k)遍历整个文件,映射View,写入0,取消映射,重复。它工作正常并且速度非常快,但是当我使用它时,会出现一些幻象内存使用情况。根据Windows任务管理器,进程本身只使用了几兆字节,但当我在较大的文件上使用它时,“物理内存使用量”猛增。例如,在一个2GB的文件上使用它足以让我的笔记本电脑昏迷几分钟,物理内存使用率达到99%,任务管理器中的所有内容都在疯狂减少内存并且所有内容都

c++ - 如何使用 GDI+ 库解码内存中的 jpeg?

GDI+提供了一个Image类,你可以使用这个类来读取一种格式的图像文件,然后将这个文件保存为另一种格式。但是如果我只想解码一个jpeg文件(已经加载到内存中),我该怎么做呢? 最佳答案 您可以使用SHCreateMemStream和Gdiplus::Image::FromStream#include#include#include#include...CComPtrstream;stream.Attach(SHCreateMemStream(buf,bufsize));Gdiplus::Image*image=Gdiplus::I

c++ - 从 32 位进程获取 64 位进程内存的入口点

我想获取我从32位进程编写的64位进程的入口点,就像您使用EnumProcessModule并获取主模块的内存地址一样。我的最终目标是从我的64位进程中的内存中读取一个字节,从它的偏移量(entry+Offset)。但是我的NtWow64ReadVirtualMemory64函数一直失败。我认为这与我的入口内存地址有关。#definePROC_BASIC_INFO0#defineNT_WOW64_QUERY_INFORMATION_PROCESS_64_NAME"NtWow64QueryInformationProcess64"#defineNT_WOW64_READ_VIRTUAL_

windows - 为变量分配多个驱动器号

我正在编写一个批处理文件,开始时很简单的事情已经开始像滚雪球一样变成一个更大的项目。我学得越多,我就越想实现。所以我的脚本的基础是我希望它能够自动执行多个SD卡的格式化和文件复制过程以及在2种不同格式之间进行选择的能力。公平警告:其中一些命令是来自thisgenius的第三方软件(我的意思是恭敬地)。这是我到目前为止的想法:@echooffREMSetthevariablesbelowforthefilepathforthebinfileandthedrivelettersforthesdcards.SETBIN_PATH=SETSD1=SETSD2=:startTitleInsert

windows - 如何解决 Arduino 中的内存错误?

每次我验证我的代码时,都会出现这个错误...Sketch使用4760字节(14%)的程序存储空间。最大值为32256字节。全局变量使用268字节(13%)的动态内存,为局部变量留下1780字节。最大值为2048字节。我正在使用Windows8.1和Arduino1.8.2。 最佳答案 这不是错误。这是它在成功编译时给出的消息。您的下一步是将其上传到董事会,看看它是否有效。 关于windows-如何解决Arduino中的内存错误?,我们在StackOverflow上找到一个类似的问题:

c - 在 C 中调用函数时出现段错误

所以我正在构建一个虚拟机,并试图让它尽可能跨平台,突然遇到一个奇怪的错误。我的机器有一个let指令,它为机器内存中的一个变量分配内存,并为该变量赋值。简而言之,let函数调用getAddress来获取变量的地址。getAddress检查变量是否已定义,并返回地址。如果变量没有定义,getAddress调用memallocate为变量分配内存,并返回地址。这是函数的定义:staticuint16_tmemallocate(Machine*m,char*symbol){uint16_tallocationAddress=getFirstFree(*m);SymbolTable*newSym

c - Windows - 如何清理进程异常终止留下的共享内存对象?

我遇到了一个问题,进程异常终止,因此一些共享资源(BaseNamedObjects)未被进程释放。CreateFileMapping函数返回ERROR_ALREADY_EXISTS表示共享内存已经存在。通过CreateFileMapping获取ERROR_ALREADY_EXISTS后返回一个句柄。所以我有以下与上述情况相关的查询:我们可以使用这个返回的句柄执行清理吗?我们可以使用CreateFileMapping返回的句柄吗?如何清理这样的共享内存对象? 最佳答案 返回的句柄对您继续使用是完全有效的,使用完毕后请关闭该句柄。但是,

c# - 如何在 C# 中重新分配 Windows 快捷方式?

关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭13年前。Improvethisquestion如何在C#中重新分配默认键盘快捷键(例如Win+E打开资源管理器窗口)?

windows - 以编程方式访问 Windows 文件分配表

如何以编程方式访问Windows中的文件分配条目(FAT)?我已经阅读了提到读取硬盘中特定地址的条目的文章,但是如何从硬盘中读取这些条目。我可以尝试使用C、C++、C#或VB。http://www.ntfs.com上的教程有助于理解在FAT上阅读的内容,但没有阐明如何以编程方式阅读。 最佳答案 您可以使用文件I/O函数打开硬盘本身,例如CreateFile和ReadFile.您可以使用CreateFile打开磁盘,使用SetFilePointer查找适当的扇区,然后使用ReadFile读取。参见thisKBarticle有关直接从磁